'use strict';

const crypto = require('crypto');
const moment = require('moment');

module.exports = {
  // 生成随机字符串
  generateRandomString(length = 32) {
    return crypto.randomBytes(Math.ceil(length / 2))
      .toString('hex')
      .slice(0, length);
  },

  // 生成出门证编号
  generatePermitNo() {
    const date = moment().format('YYYYMMDD');
    const random = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
    return `P${date}${random}`;
  },

  // 生成二维码内容
  generateQRCodeContent(permitId) {
    const timestamp = Date.now();
    const random = this.generateRandomString(8);
    return `${permitId}_${timestamp}_${random}`;
  },

  // 密码加密
  encryptPassword(password, salt) {
    return crypto.createHmac('sha256', salt)
      .update(password)
      .digest('hex');
  },

  // 验证密码
  validatePassword(password, userSalt, userPassword) {
    return this.encryptPassword(password, userSalt) === userPassword;
  },

  // 生成分页参数
  getPagination(page = 1, pageSize = 10) {
    const offset = (page - 1) * pageSize;
    const limit = parseInt(pageSize);
    return { offset, limit };
  },

  // 格式化分页结果
  formatPaginationResult(data, page, pageSize) {
    return {
      list: data.rows,
      pagination: {
        current: parseInt(page),
        pageSize: parseInt(pageSize),
        total: data.count
      }
    };
  },

  // 格式化日期时间
  formatDateTime(date) {
    return moment(date).format('YYYY-MM-DD HH:mm:ss');
  },

  // 格式化日期
  formatDate(date) {
    return moment(date).format('YYYY-MM-DD');
  },

  // 获取当天开始时间
  getTodayStart() {
    return moment().startOf('day').toDate();
  },

  // 获取当天结束时间
  getTodayEnd() {
    return moment().endOf('day').toDate();
  },

  // 检查文件类型是否为图片
  isImage(mimeType) {
    return mimeType.startsWith('image/');
  },

  // 生成文件名
  generateFileName(originalname) {
    const ext = originalname.split('.').pop();
    const timestamp = Date.now();
    const random = this.generateRandomString(8);
    return `${timestamp}_${random}.${ext}`;
  }
}; 